statically and dynamically typed language difference